<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>原型链</title>
</head>
<body>

<script>

/**
 * 声明类的几种方式
 *
 */

// 第一种方式：字面量
var o1 = {name: 'o1'}
var o2 = new Object({name: 'o2'})


// 第二种方式：构造函数
function M(name) {
  this.name = name
}

var o3 = new M('o3')

// 第三种方式：Object.create; 该方法是通过原型链进行继承； Object.create等价于o4.__proto__ == {name: 'p'}
var p = {name: 'p'}
var o4 = Object.create(p)

console.log(o1)
console.log(o2)
console.log(o3)
console.log(o4)

console.log(M.prototype.constructor === M) // true
console.log(o3.__proto__ === M.prototype) // true
</script>

</body>
</html>